此系列文目前主要在此網站上繼續連載,本文更新於此:https://web-tracking.allenchou.cc/
萬事起頭難,我想文章的起頭大概更難吧。這一系列的文章將會介紹有關 web tracking 各種你不需要的、對你人生毫無幫助的冷知識。我們將從最基礎的概念開始講起,從追蹤技巧講到反追蹤技巧,從基本技術講到奇技淫巧,然後再討論到新世代的追蹤技術長怎樣。
Web tracking 是指「在 web 上面追蹤使用者」的行為。
稍微 formally 一點來講,web tracking 是「藉由為每個使用者指定或計算出一個(唯一的) identifier,在未來遇到同一個使用者時,以此辨認出這是哪個使用者」的一系列的技術。這裡所說的辨認重複使用者,不一定要是在同一個網站辨認,也關注不同網頁之間的重複使用者辨識。
舉個例子,我是一個廣告商,使用者在 blog.example
瀏覽了一台筆電的開箱文,於是我就指定這個使用者的 identifier 是 userA
,並猜想他對這台筆電有興趣。當使用者又在 blog.example
繼續瀏覽了一個耳機的開箱文,於是我又記錄下來他喜歡耳機。至此都還在同個網站上追蹤使用者,即 same-site tracking。當使用者瀏覽 news.example
時,藉由 web tracking 技術,我發現他就是 userA
,正是之前在瀏覽筆電開箱文的那個人,於是就可以在 news.example
投放廣告吸引他購買這台筆電,這就是 cross-site tracking。
Cross-site tracking 的危害通常被認為大於 same-site tracking 的危害。讓網站管理員知道我瀏覽他的網站的哪些文章可能不是大問題,尤其如果我有登入帳號時,網站管理員肯定知道我是誰,我在看什麼。不過,如果無論我在瀏覽哪個網站,Facebook 都可以看到我的瀏覽紀錄,那大概就是個大問題了。所以目前許多封鎖 tracking 的方法都更重視抵禦 cross-site tracking,至於 same-site tracking,因為傷害較小而且更難避免,所以討論會相對少一些。
早期的 web tracking 通常是嘗試把一個唯一的 identifier 儲存在使用者的瀏覽器中,以後只要檢視該 identifier 便可以知道使用者是誰。通常這種需要在瀏覽器中儲存資料的技術被稱為 stateful tracking。但 stateful tracking 有個問題:如果使用者把 identifier 刪掉,就追蹤不到他了。於是之後有人在想,如果不存資料在瀏覽器中,而是利用一些特徵去「算出」identifier,使用者就沒辦法把東西刪掉了,至此我們進入 stateless tracking 的時代。
在 stateless tracking 的技術中,最知名也最廣泛被使用的是 browser fingerprinting。Browser fingerprinting 利用了瀏覽器、OS、硬體等的各種資訊,去算出一個 identifier,因為這些資訊不一定會常有變動(至少多數人不會每三天換一張顯卡吧),所以每次算出來的 identifier 的課都有很高的機率是一樣的。
我想多數人看到 web tracking 的第一個反應是:所以這跟 Security 有什麼關係啊?為什麼不去 Modern Web 組。
其實我也不知道欸。可能因為 Modern Web 看起來好競爭喔,所以想來 Security 的溫暖小圈圈取暖吧。
稍微認真一些回應的話,一般來說,資安(security)與隱私(privacy)是難以分割的,例如藉由資安的技術保護隱私(個人資料等),隱私的洩漏可能創造新的資安危機,所以我們常把 security 與 privacy 合併使用。我認為不應該把 security 狹隘地想像成駭進別人的電腦然後提權拿到 root,其他重要的問題,像是如何維持通訊安全(e.g. HTTPS)以及在網路上保持匿名(e.g. Tor),或是在資訊不洩漏的情況下做到很多功能(e.g. privacy-preserving 的應用、密碼學黑魔法),也都是資安的一環。
也許 web tracking 不像是其他典型資安領域的 attack & defense,但從前述對於 web tracking 用途的論述可以看出,這些技術可能造成隱私危害,讓使用者在網路上無所遁形,而這樣的隱私洩漏可以是種資安威脅。希望我有成功說服大家。
如果很疑惑這些隱私洩漏有什麼關係,或甚至覺得隱私不重要,我不認為自己能用三言兩語說服你,也不覺得說服大家隱私很重要是這系列文章的目的,但我很推薦 Shoshana Zuboff 的《監控資本主義時代》,這本書做了許多論述。
同學,你問錯問題了。比較好的問題是:我需要知道 web tracking 相關技術嗎?為什麼?
很遺憾的,你不需要知道 web tracking 相關技術。除非這是你在研究 browser privacy 或是你就在網路分析公司工作,否則這些知識本身對你的人生大概不會有什麼幫助。
不過我想來分享一下自己的學習心得。Web tracking 技術最有趣的點在於發現一些看似正常的設計竟然可以被如此運用,看似完備的防禦可以被如此繞過,那種「還可以這樣搞喔天啊」的驚奇感也就油然而生。此外,在研究這些技術的過程中,我也開始會去注意每一個功能的設計有沒有可能 leak 一些意想不到的資訊,這些資訊可能被怎麼運用。
當然,這只是我非常個人的收穫,讀者可能會有不一樣的收穫,可能學到更多東西,可能找到新的興趣,可能會覺得奇怪的知識增加了,也可能讀完之後只覺得自己浪費時間讀一些不知道能做什麼的東西。每個人的學習經驗與歷程都是不一樣的,但也正是如此,世界才如此有趣吧。
希望我有成功說服讀者嘗試把這系列的文章看下去,至此終於可以來介紹這一系列的文章會寫什麼了。
除了開頭與結尾以外,系列文章大概可以分成三大部份:
每一個部份會寫幾篇文章,會舉哪些例子,雖然心中大概有個圖像了,但還沒有很肯定,所以就先不放出來了。等系列文章寫完之後再回頭修改這段文字吧。
原則上每篇文章之間連貫性不高,如果真有連貫性,我也會盡可能地明顯讓讀者知道這篇文章需要前面哪些文章作為基底,所以可以跳著讀,應該不會有太大的問題。
很遺憾的(?),閱讀這系列的文章會需要一些基本知識。
在一開始介紹 stateful tracking 與 browser fingerprinting 時,會需要 HTTP 與 JavaScript 的基礎,基本上只要有寫過網頁前端或是打過 web 類型的 CTF 題目就非常夠用了。文章中提到的多數技術,都會在第一次提及時做 high-level 的介紹,但這只是幫已經對該技術有基礎認識的讀者回憶起那是什麼,完全沒聽過該技術的讀者很可能聽不懂我的介紹。如果真的缺乏什麼背景知識,網路上也都有相關資源可以閱讀(尤其推薦 MDN),不用擔心會需要花費很大心力才能跟上。有鑑於這系列文章的定位是會基本的 web 就要能看懂,如果讀者需要花費很大心力跟上進度,那大概就是我寫得不夠淺顯易懂吧,還請讓我知道哪裡可以改進,謝謝。
後面會介紹 privacy-preserving web tracking,其中有些技術可能會應用到專業領域的知識,像是密碼學或是 Machine Learning。兩個領域也都有許多網路上的資源可以參考,但可能會稍微難一些。
突然想到還沒介紹自己是誰呢。不過我知道沒人在乎我是誰。如果真的要介紹,我是個不學無術文筆奇差還自以為有能力寫完這一系列文章的笨蛋。期許一個月後的自己真的有能力寫完這系列的文章,不是只會打嘴砲。
在一篇楔子裡面寫結語,是個很有趣的體驗呢。
我想提醒讀者,技術不是中立的,我也不是中立的,我更沒有打算假裝自己很中立。我的立場很鮮明:web tracking 會對隱私造成傷害,這些技術是有害的,我們要反制它們。在後面文章的論述,我對於 web tracking 的論述也是以他們有害為論述核心。期許讀者在閱讀的同時,小心地注意文章中明示或暗示的價值,並且時刻反思我講的真的有道理,不要輕易被我帶風向了。
此外,我不是相關領域的專家,也就只是讀了幾篇文章而已,對這個領域的認識淺薄到實在不足掛齒,更遑論拿來說嘴,寫這系列文章也只是想整理過去自己所學。如果我有寫錯,還希望各位先進能不吝指教。然後這系列的文章會有一點晶晶體,我嘗試過盡可能講中文,但有些名詞翻譯成中文感覺就是不對,所以就覺得算了就這樣吧,畢竟 web tracking 真的很 amazing,翻成 Chinese 整個 meaning 就偏掉了。
希望大家會喜歡這系列的文章,也期許我自己可以順利完賽。如果有任何意見或想要交流,都可以留言或寄信給我(s3131212 at gmail dot com)。